package br.com.pnfp.web.control.actions.cadastros;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.pnfp.web.control.actions.DefaultAction;
import br.com.pnfp.web.control.forms.cadastros.CadastroLocalidadeForm;
import br.com.pnfp.web.model.enums.UF;
import br.com.pnfp.web.model.vo.Cidade;
import br.com.pnfp.web.model.vo.Localidade;
import br.com.pnfp.web.model.vo.TipoLocalidade;

public class CadastroLocalidadeAction extends DefaultAction {
	
	private static final Logger logger = Logger.getLogger(CadastroLocalidadeAction.class); 
	
	public ActionForward iniciar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		return mapping.findForward("body");
	}
	
	public ActionForward consultar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroLocalidadeForm localidadeForm = (CadastroLocalidadeForm) form;
		consultar(localidadeForm, request);
		
		return mapping.findForward("body");
	}
	
	public ActionForward incluir(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroLocalidadeForm localidadeForm = (CadastroLocalidadeForm) form;
		Localidade vo = new Localidade();
		vo.setNome(localidadeForm.getNome());
		vo.setTipoLocalidade(new TipoLocalidade(localidadeForm.getTipoLocalidade()));
		vo.setCidade(new Cidade(localidadeForm.getCidade()));
		vo.setEndereco(localidadeForm.getEndereco());
		vo.setBairro(localidadeForm.getBairro());
		vo.setComplemento(localidadeForm.getComplemento());
		vo.setCep(localidadeForm.getCep());
		
		getLocalidadeDAO().incluir(vo);
		
		return null;
	}	
	
	public ActionForward alterarIniciar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroLocalidadeForm localidadeForm = (CadastroLocalidadeForm) form;
		List<Localidade> lista = getLocalidadeDAO().consultar(new Localidade(localidadeForm.getIdSelecionado()));
		 
		Localidade vo = lista.get(0);		
		printJsonObjectToStream(vo, response);
		
		return null;
	}	
	
	public ActionForward alterar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroLocalidadeForm localidadeForm = (CadastroLocalidadeForm) form;
		Localidade vo = new Localidade();
		vo.setCodigo(localidadeForm.getIdSelecionado());
		vo.setNome(localidadeForm.getNome());
		vo.setTipoLocalidade(new TipoLocalidade(localidadeForm.getTipoLocalidade()));
		vo.setCidade(new Cidade(localidadeForm.getCidade()));
		vo.setEndereco(localidadeForm.getEndereco());
		vo.setBairro(localidadeForm.getBairro());
		vo.setComplemento(localidadeForm.getComplemento());
		vo.setCep(localidadeForm.getCep());
		getLocalidadeDAO().alterar(vo);
		
		return null;
	}
	
	public ActionForward excluir(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroLocalidadeForm localidadeForm = (CadastroLocalidadeForm) form;
		getLocalidadeDAO().excluir(localidadeForm.getIdSelecionado());
		
		return mapping.findForward("body");
	}
	
	
	private void consultar(CadastroLocalidadeForm localidadeForm, HttpServletRequest request) {
		Localidade vo = new Localidade();
		vo.setNome(localidadeForm.getNomeConsultar());
		if(localidadeForm.getTipoLocalidadeConsultar() != null) {
			vo.setTipoLocalidade(new TipoLocalidade(localidadeForm.getTipoLocalidadeConsultar()));
		}
		vo.setEndereco(localidadeForm.getEnderecoConsultar());
		vo.setCep(localidadeForm.getCepConsultar());		
		if(localidadeForm.getUfConsultar() != null) {
			vo.setCidade(new Cidade());
			vo.getCidade().setUf(UF.valueOf(localidadeForm.getUfConsultar()));
		}		
		
		List<Localidade> listaResultado = getLocalidadeDAO().consultar(vo);
		request.setAttribute("listaResultado", listaResultado);
	}
}
